home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / SFP004.I < prev    next >
Encoding:
Text File  |  1994-02-08  |  4.0 KB  |  3 lines

  1. ⓪ IMPLEMENTATION MODULE SFP004;⓪ (*$Y+, L-, N+, M-*)⓪ ⓪ (*⓪"25.10.90  TT  Format Error wird erkannt⓪"17.12.90  TT  FPUReset setzt FPU auch nach Fehler wieder richtig zurück⓪"20.02.91  TT  FPUError: LINK für Scanning eingesetzt⓪"16.01.94  TT  FPUInit ruft nicht mehr SysInfo.FPU() auf sondern prüft direkt⓪0auf Vorhandensein der FPU.⓪"08.02.94  TT  Kein Byte-Zugriff mehr auf fpstat+1.⓪ *)⓪ ⓪ FROM SYSTEM IMPORT ASSEMBLER;⓪ FROM SystemError IMPORT Abort;⓪ FROM MOSSupport IMPORT ToSuper, ToUser;⓪ IMPORT MOSGlobals;⓪ ⓪ CONST fpstat  =  $fffa40;       (* Response word of MC68881 read *)⓪&fpctrl  =  $fffa42;       (* Control word of MC68881 write *)⓪&fpsave  =  $fffa44;⓪&fpcmd   =  $fffa4a;       (* Command word of MC68881 write *)⓪&fpop    =  $fffa50;       (* Operand long of MC68881 read/write *)⓪ ⓪ PROCEDURE FPUReset;⓪"BEGIN⓪$ASSEMBLER⓪(TST.W   fpstat⓪(MOVE.W  #3,fpctrl       ; Reset FPU⓪(CMPI.W  #$0802,fpstat⓪(BEQ     idle⓪(; die FSAVE-Anforderung muß erst beendet werden:⓪&again:⓪(MOVE.W  fpstat,D0⓪(TST.B   D0⓪(BNE     endRead⓪(TST.L   fpop⓪(BRA     again⓪&endRead:⓪(MOVE.W  #3,fpctrl       ; Reset FPU⓪&idle:⓪(; FMOVE  #$0000F400,FPCR⓪(;   Bedeutung der Bits: Take Exception on...⓪(;    - Operand Error⓪(;    - Overflow⓪(;    - Div By Zero⓪(;    - NAN⓪(;    - Bcc/Scc on unordered⓪(TST.W   fpstat⓪(MOVE.W  #$9000,fpcmd⓪%RL MOVE.W  fpstat,D0⓪(TST.B   D0⓪(BEQ     RL⓪(MOVE.L  #$0000F400,fpop⓪(TST.W   fpstat⓪$END⓪"END FPUReset;⓪ ⓪ PROCEDURE FPUError;⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(MOVE    fpstat,-(A7)⓪(MOVE    fpsave,-(A7)⓪(JSR     FPUReset⓪(MOVE    (A7)+,D1⓪(MOVE    (A7)+,D0⓪ ⓪(ANDI    #$FF00,D1⓪(CMPI    #$0200,D1⓪(BNE     noFormatError⓪(⓪(TRAP    #6⓪(DC.W    -22-$E000  ; Gen. FP error: Text follows, callerCaused, noCont⓪(ACZ     'Format Error (FSAVE/FRESTORE)'⓪(SYNC⓪(UNLK    A5⓪(RTS⓪(⓪ noFormatError:⓪(CMPI.B  #$0D,D0⓪(BNE     no0D⓪(TRAP    #6⓪(DC.W    -22-$C000  ; Gen. FP error: Text follows, callerCaused, mayCont⓪(ACZ     'FPU Protocol Violation'⓪(SYNC⓪(UNLK    A5⓪(RTS⓪&no0D⓪(CMPI.B  #$32,D0⓪(BNE     no32⓪(TRAP    #6⓪(DC.W    -5-$4000  ; div by zero: callerCaused, mayCont⓪(UNLK    A5⓪(RTS⓪&no32⓪(CMPI.B  #$34,D0⓪(BNE     no34⓪(TRAP    #6⓪(DC.W    -6-$4000  ; out of range (operand error): callerCaused, mayCont⓪(UNLK    A5⓪(RTS⓪&no34⓪(CMPI.B  #$35,D0⓪(BNE     no35⓪(TRAP    #6⓪(DC.W    -7-$4000  ; Overflow: callerCaused, mayCont⓪(UNLK    A5⓪(RTS⓪&no35⓪(TRAP    #6⓪(DC.W    -22-$4000  ; Gen. FP error: callerCaused, mayCont⓪(UNLK    A5⓪$END⓪"END FPUError;⓪ ⓪ (*$Z+*)⓪ PROCEDURE hasSFP (): BOOLEAN;⓪ (*$Z=*)⓪"BEGIN⓪$ASSEMBLER⓪(SUBQ.L  #4,A7⓪(JSR     ToSuper⓪ ⓪(MOVEQ   #FALSE,D0⓪(MOVE.L  A7,D2⓪(MOVE.L  $08,D1          ; BusError-Exc-Vektor⓪(LEA     b(PC),A0⓪(MOVE.L  A0,$08⓪(TST.W   fpstat⓪(MOVEQ   #TRUE,D0⓪&b MOVE.L  D2,A7⓪(MOVE.L  D1,$08⓪ ⓪(JSR     ToUser⓪(ADDQ.L  #4,A7⓪$END⓪"END hasSFP;⓪ ⓪ PROCEDURE FPUInit;⓪"BEGIN⓪$(* 16.1.94:⓪%* Es wird nur direkt auf die SFP004 geprüft, weil SysInfo.FPU() beim⓪%* Vorhandensein einer internalFPU gar nicht mehr auf die externe prüft.⓪%* So liefert FPU() dann "internalFPU", obwohl auch die gesuchte⓪%* SFP004 installiert wäre.⓪%*)⓪$IF NOT hasSFP () (* vormals: FPU () # externalFPU *) THEN⓪&ASSEMBLER⓪(MOVE.W  #MOSGlobals.fUnknownDevice,(A3)+⓪(JMP     Abort⓪&END⓪$END;⓪$FPUReset⓪"END FPUInit;⓪ ⓪ END SFP004.⓪ ə
  2. (* $FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$00000755$FFE39FCE$00000D6F$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCEÇ$00000157T.......T.......T.......T.......T.......T.......T.......T.......T.......T.......$00000165$00000157$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCE$FFE39FCEêÇé*)
  3.